FLAG or WAY or TARGET. Note that stepping into a BLOCK is undefined just as stepping out of board is.WAY or FLAG or ...) AND number of flags visited so far AND reward got so far.n*REVISITED_REWARDTARGET with the maximum reward gathered and visited all 7 flagsFirst we define some constants and the initial board of the maze
BLOCK places. This will reduce a lot of states and also moves.import copy
import numpy as np
from typing import Tuple
RUN_ALL = True
RIGHT = 'R'
LEFT = 'L'
UP = 'U'
DOWN = 'D'
WAY = 'W'
BLOCK = 'B'
TARGET = 'T'
FLAG = 'F'
REVISITED = 'R'
WAY_REWARD = -1
REVISITED_REWARD = -2
FLAG_REWARD = 30
TARGET_REWARD = 300
BASE_REWARDS = {
WAY: WAY_REWARD,
TARGET: TARGET_REWARD,
FLAG: FLAG_REWARD,
REVISITED: REVISITED_REWARD
}
ACTIONS = (RIGHT, LEFT, UP, DOWN)
BLOCK_TYPES = (WAY, TARGET, FLAG, REVISITED) # we don't need 'B' here
initBoard = [['W', 'B', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W'],
['W', 'W', 'W', 'F', 'W', 'B', 'W', 'W', 'W', 'W'],
['F', 'W', 'W', 'W', 'W', 'B', 'F', 'W', 'W', 'W'],
['B', 'B', 'W', 'B', 'B', 'W', 'B', 'W', 'W', 'W'],
['W', 'F', 'B', 'W', 'B', 'F', 'B', 'B', 'B', 'W'],
['W', 'W', 'B', 'W', 'B', 'W', 'W', 'W', 'W', 'W'],
['W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W'],
['W', 'F', 'W', 'W', 'W', 'W', 'B', 'B', 'B', 'B'],
['W', 'B', 'B', 'B', 'B', 'B', 'W', 'W', 'W', 'W'],
['W', 'W', 'W', 'W', 'W', 'W', 'W', 'B', 'F', 'T']]
class Environment:
def __init__(self) -> None:
self._flagsVisited = set()
self.initBourd()
self.initVisitedFlags()
self.initVisitedBlocks()
def initVisitedFlags(self):
self.visitedFlags = set()
def initVisitedBlocks(self):
self.visitedBlocks = dict()
def initBourd(self):
self.board = copy.deepcopy(initBoard)
def addVisit(self, row: int, column: int) -> None:
if (row, column) in self.visitedBlocks:
self.visitedBlocks[row, column] += 1
else:
self.visitedBlocks[row, column] = 1
if self.isFlag(row, column) and (row, column) not in self.visitedFlags:
self.visitedFlags.add((row, column))
def isFlag(self, row, column) -> bool:
return self.board[row][column] == FLAG
def isWay(self, row, column) -> bool:
return self.board[row][column] == WAY
def isTarget(self, row, column) -> bool:
return self.board[row][column] == TARGET
def checkAction(row: int, column: int, action: str) -> bool:
if action == RIGHT:
return column + 1 < len(initBoard[0]) and initBoard[row][column + 1] != BLOCK
elif action == LEFT:
return column - 1 >=0 and initBoard[row][column - 1] != BLOCK
elif action == UP:
return row - 1 >= 0 and initBoard[row - 1][column] != BLOCK
elif action == DOWN:
return row + 1 < len(initBoard) and initBoard[row + 1][column] != BLOCK
else:
raise Exception("Unknown action")
def getNextPosition(row: int, column: int, action: str):
if checkAction(row, column, action) and action in ACTIONS:
if action == RIGHT:
return row, column + 1
elif action == LEFT:
return row, column - 1
elif action == UP:
return row - 1, column
elif action == DOWN:
return row + 1, column
else:
raise Exception("Unknown action")
else:
return -1, -1
class State:
# FLAG_VISIT_REWARD_RATE = 2
def __init__(self, row, column, env: Environment):
self.row = row
self.column = column
self.rewardSoFar = 0
self.env = env
def addReward(self, newReward: int): # add the reward to total rewards
self.rewardSoFar += newReward
def setReward(self, reward: int):
self.rewardSoFar = reward
def move(self, newRow: int, newColumn: int): # if it can move, it changes row and column
if(0 <= newRow and newRow < len(self.env.board) and 0 <= newColumn and newColumn < len(self.env.board[0]) and self.env.board[newRow][newColumn] != BLOCK):
self.row = newRow
self.column = newColumn
else:
raise IndexError("The action will cause the agent to get out of the bourd or to a block point")
def action(self, action: str): # if the action is OK and valid it takes it and move
if(action in ACTIONS):
if action == RIGHT:
self.move(self.row, self.column + 1)
elif action == LEFT:
self.move(self.row, self.column - 1)
elif action == UP:
self.move(self.row - 1, self.column)
else: # definitely DOWN
self.move(self.row + 1, self.column)
else:
raise Exception(f"Unknown type of action: {action}")
def __str__(self) -> str:
return f"{self.row, self.column}"
callable class!¶__qTable (q-table) and has an update method to update it.callable to call the Q function related to this q-table¶row and column and take some action to which type of block we'll go. So out entries in q-table will look like (row, column, action, blockTypeWeWillGo).¶ALPHA = 0.9
GAMMA = 0.25
# The object for Q function
# we decided to create a class for it to hold the info
class Q:
def __init__(self) -> None:
self.__qTable = dict()
for i in range(len(initBoard)):
for j in range(len(initBoard[0])):
if initBoard[i][j] != BLOCK:
for action in ACTIONS:
nextPosition = getNextPosition(i, j, action)
if nextPosition != (-1, -1):
nextBlockType = initBoard[nextPosition[0]][nextPosition[1]]
self.__qTable[i, j, action, nextBlockType] = BASE_REWARDS[nextBlockType]
self.__qTable[i, j, action, REVISITED] = REVISITED_REWARD
def getTable(self):
return copy.deepcopy(self.__qTable)
def update(self,
row: int,
column: int,
action: str,
blockType: str,
oldValue: int,
reward: int,
maxQ: int) -> None:
# print(f"updated from {(row, column, action, blockType)} = {self.__qTable[row, column, action, blockType]} to ", end='')
updatedValue = oldValue + ALPHA*(reward + GAMMA*maxQ - oldValue)
self.__qTable[row, column, action, blockType] = updatedValue
# print(f"{oldValue + ALPHA*(reward + GAMMA*maxQ - oldValue)}", end=' | ')
def __call__(self, state: State, action: str, env: Environment) -> tuple[State, int]:
nextState = copy.deepcopy(state)
nextState.action(action)
return self.__qTable[state.row, state.column, action, env.board[nextState.row][nextState.column]]
chooseRandomAction: will return a valid randomly choosen action based on the state and the environment.
getBestQ: will take state and env and q function and will return what's the best policy(best action) based on q-table in q function and what will be its q-value
getReward: simply return the reward based on the row and column we've stepped into in env
nth flag we'll get n*FLAG_REWARD. This will encourage the engine to visite more flags on the wayTARGET_REWARD or WAY_REWARDnth time we'll get n*REVISIT_REWARD (which will be negative and is a big punish!)import random
def chooseRandomAction(state: State, env: Environment) -> str:
row, column = state.row, state.column
okay = False
randomAction = None
choices = list(ACTIONS)
while not okay:
randomAction = random.choice(choices)
if checkAction(row, column, randomAction):
okay = True
choices.remove(randomAction)
return randomAction
def getBestQ(state: State, env: Environment, q: Q) -> int:
maxQ = -np.inf
bestAction = None
for action in ACTIONS:
if checkAction(state.row, state.column, action):
qValue = q(state, action, env)
if(maxQ < qValue):
maxQ = qValue
bestAction = action
maxQ = np.max([maxQ, qValue])
return bestAction, maxQ
def getReward(row: int, column: int, env: Environment):
if env.isFlag(row, column):
return FLAG_REWARD * (len(env.visitedFlags)+1)
if env.isTarget(row, column):
return TARGET_REWARD
if env.isWay(row, column):
return WAY_REWARD
if (row, column) in env.visitedBlocks: # visited
return env.visitedBlocks[row, column] * REVISITED_REWARD
n times. We'll explote in the first n/5 steps(itteration) and explore in the next 4n/5 steps(itterations). And to progress gradually, we run 1st episode 1 itteration, 2nd epidose 2 itterations and nth episode n itterations ..¶Episode class¶Episode class we keep track of each episode progress info.¶The runNTimes method will run this episode n times. Which will explote n/5 steps and explore 4n/5 steps as explaned above
The runOneItter is the core of the algorithm and runs one itteration of the episode and return True if it has reached the target
AWARD_LIMIT = -300
class Episode:
def __init__(self, qFunction: Q) -> None:
self.env = Environment()
self.state = State(0, 0, self.env)
self.env.addVisit(0, 0)
self.env.board[0][0] = REVISITED
self.qFunction = qFunction
def runNTimes(self, n: int):
# print(f"------------------------A new Episode started that will run at most {n} itterations-----------------------------")
# print("==============explotation==================")
for itterNumber in range(n//5):
if self.runOneItter(getBestQ(self.state, self.env, self.qFunction)[0]) or self.state.rewardSoFar < AWARD_LIMIT:
return
# print("==============exploration==================")
for itterNumber in range(4*n//5):
if self.runOneItter(chooseRandomAction(self.state, self.env)) or self.state.rewardSoFar < AWARD_LIMIT:
return
def runOneItter(self, action):
# print(f"going {action}", end=' | ')
nextState = copy.deepcopy(self.state)
nextState.action(action)
# print(f"to {nextState.row, nextState.column}", end= " | ")
oldQValue = self.qFunction(self.state, action, self.env)
oldBlockType = self.env.board[nextState.row][nextState.column]
reward = getReward(nextState.row, nextState.column, self.env)
nextState.addReward(reward)
# print(f"reward so far: {self.state.rewardSoFar}", end= " | ")
# print(f"Reward {reward}", end=' | ')
# update env
self.env.addVisit(nextState.row, nextState.column)
self.env.board[nextState.row][nextState.column] = REVISITED
bestQ = getBestQ(nextState, self.env, self.qFunction)
self.qFunction.update(self.state.row, self.state.column, action, oldBlockType, oldQValue, reward, bestQ[1])
self.state = nextState
if (self.state.row, self.state.column) == (len(initBoard)-1, len(initBoard[0])-1):
# print()
return True
# print()
return False
runAlgorithm: runs the algorithm with the stategy explaned above with n episodes
reportResults: reports the result of the algorimth after learning its q-table. It takes the q object and follow its table until it reaches the target.
def runAlgorithm(n) -> Q:
qFunction = Q()
for episodeNum in range(n):
episode = Episode(qFunction)
episode.runNTimes(episodeNum+1)
return qFunction
def reportResult(q: Q):
env = Environment()
state = State(0, 0, env)
print(f"getting reward {getReward(state.row, state.column, env)}", end=" ")
env.addVisit(0, 0)
env.board[state.row][state.column] = REVISITED
limit = 60 # the actual path length is 51
rewardSoFar = -1 # including starging point
qValueSoFar = 0
numOfFlagsVisited = 0
for stepNum in range(limit):
action, maxQ = getBestQ(state, env, q)
qValueSoFar += maxQ
print(f"[#{stepNum+1}] {state} going {action} to:")
state.action(action)
rewardSoFar += getReward(state.row, state.column, env)
print(f"getting reward {getReward(state.row, state.column, env)}", end=" ")
if(env.isFlag(state.row, state.column)):
numOfFlagsVisited += 1
env.addVisit(state.row, state.column)
env.board[state.row][state.column] = REVISITED
if (state.row, state.column) == (len(initBoard)-1, len(initBoard[0])-1):
print(state)
print(f"Finished with path length:{stepNum}, flags visited: {numOfFlagsVisited}, Total reward: {rewardSoFar}, TotalQValueEarned: {qValueSoFar}")
break
else:
print(f"Failed!")
Run 700 episodes such that nth episode will run n itterations One of the best paramter set is (alpha = 0.9, gamma = 0.25) as we set above
Testing with
if RUN_ALL:
q = runAlgorithm(700)
reportResult(q)
getting reward -1 [#1] (0, 0) going D to: getting reward -1 [#2] (1, 0) going D to: getting reward 30 [#3] (2, 0) going R to: getting reward -1 [#4] (2, 1) going R to: getting reward -1 [#5] (2, 2) going U to: getting reward -1 [#6] (1, 2) going R to: getting reward 60 [#7] (1, 3) going R to: getting reward -1 [#8] (1, 4) going U to: getting reward -1 [#9] (0, 4) going R to: getting reward -1 [#10] (0, 5) going R to: getting reward -1 [#11] (0, 6) going D to: getting reward -1 [#12] (1, 6) going D to: getting reward 90 [#13] (2, 6) going R to: getting reward -1 [#14] (2, 7) going R to: getting reward -1 [#15] (2, 8) going D to: getting reward -1 [#16] (3, 8) going R to: getting reward -1 [#17] (3, 9) going D to: getting reward -1 [#18] (4, 9) going D to: getting reward -1 [#19] (5, 9) going L to: getting reward -1 [#20] (5, 8) going L to: getting reward -1 [#21] (5, 7) going L to: getting reward -1 [#22] (5, 6) going L to: getting reward -1 [#23] (5, 5) going U to: getting reward 120 [#24] (4, 5) going D to: getting reward -2 [#25] (5, 5) going D to: getting reward -1 [#26] (6, 5) going L to: getting reward -1 [#27] (6, 4) going L to: getting reward -1 [#28] (6, 3) going L to: getting reward -1 [#29] (6, 2) going D to: getting reward -1 [#30] (7, 2) going L to: getting reward 150 [#31] (7, 1) going U to: getting reward -1 [#32] (6, 1) going U to: getting reward -1 [#33] (5, 1) going U to: getting reward 180 [#34] (4, 1) going L to: getting reward -1 [#35] (4, 0) going D to: getting reward -1 [#36] (5, 0) going D to: getting reward -1 [#37] (6, 0) going D to: getting reward -1 [#38] (7, 0) going D to: getting reward -1 [#39] (8, 0) going D to: getting reward -1 [#40] (9, 0) going R to: getting reward -1 [#41] (9, 1) going R to: getting reward -1 [#42] (9, 2) going R to: getting reward -1 [#43] (9, 3) going R to: getting reward -1 [#44] (9, 4) going R to: getting reward -1 [#45] (9, 5) going R to: getting reward -1 [#46] (9, 6) going U to: getting reward -1 [#47] (8, 6) going R to: getting reward -1 [#48] (8, 7) going R to: getting reward -1 [#49] (8, 8) going D to: getting reward 210 [#50] (9, 8) going R to: getting reward 300 (9, 9) Finished with path length:49, flags visited: 7, Total reward: 1096, TotalQValueEarned: 1460.1745804415784
Results:
Testing with
if RUN_ALL:
GAMMA = 0.5
q = runAlgorithm(700)
reportResult(q)
getting reward -1 [#1] (0, 0) going D to: getting reward -1 [#2] (1, 0) going D to: getting reward 30 [#3] (2, 0) going R to: getting reward -1 [#4] (2, 1) going R to: getting reward -1 [#5] (2, 2) going R to: getting reward -1 [#6] (2, 3) going U to: getting reward 60 [#7] (1, 3) going R to: getting reward -1 [#8] (1, 4) going U to: getting reward -1 [#9] (0, 4) going R to: getting reward -1 [#10] (0, 5) going R to: getting reward -1 [#11] (0, 6) going D to: getting reward -1 [#12] (1, 6) going D to: getting reward 90 [#13] (2, 6) going R to: getting reward -1 [#14] (2, 7) going U to: getting reward -1 [#15] (1, 7) going R to: getting reward -1 [#16] (1, 8) going R to: getting reward -1 [#17] (1, 9) going D to: getting reward -1 [#18] (2, 9) going D to: getting reward -1 [#19] (3, 9) going D to: getting reward -1 [#20] (4, 9) going D to: getting reward -1 [#21] (5, 9) going L to: getting reward -1 [#22] (5, 8) going L to: getting reward -1 [#23] (5, 7) going L to: getting reward -1 [#24] (5, 6) going L to: getting reward -1 [#25] (5, 5) going U to: getting reward 120 [#26] (4, 5) going D to: getting reward -2 [#27] (5, 5) going D to: getting reward -1 [#28] (6, 5) going L to: getting reward -1 [#29] (6, 4) going L to: getting reward -1 [#30] (6, 3) going L to: getting reward -1 [#31] (6, 2) going D to: getting reward -1 [#32] (7, 2) going L to: getting reward 150 [#33] (7, 1) going U to: getting reward -1 [#34] (6, 1) going U to: getting reward -1 [#35] (5, 1) going U to: getting reward 180 [#36] (4, 1) going L to: getting reward -1 [#37] (4, 0) going D to: getting reward -1 [#38] (5, 0) going D to: getting reward -1 [#39] (6, 0) going D to: getting reward -1 [#40] (7, 0) going D to: getting reward -1 [#41] (8, 0) going D to: getting reward -1 [#42] (9, 0) going R to: getting reward -1 [#43] (9, 1) going R to: getting reward -1 [#44] (9, 2) going R to: getting reward -1 [#45] (9, 3) going R to: getting reward -1 [#46] (9, 4) going R to: getting reward -1 [#47] (9, 5) going R to: getting reward -1 [#48] (9, 6) going U to: getting reward -1 [#49] (8, 6) going R to: getting reward -1 [#50] (8, 7) going R to: getting reward -1 [#51] (8, 8) going D to: getting reward 210 [#52] (9, 8) going R to: getting reward 300 (9, 9) Finished with path length:51, flags visited: 7, Total reward: 1094, TotalQValueEarned: 2173.5493091430394
Results:
Testing with
if RUN_ALL:
GAMMA = 1
q = runAlgorithm(800)
reportResult(q)
getting reward -1 [#1] (0, 0) going D to: getting reward -1 [#2] (1, 0) going R to: getting reward -1 [#3] (1, 1) going R to: getting reward -1 [#4] (1, 2) going U to: getting reward -1 [#5] (0, 2) going R to: getting reward -1 [#6] (0, 3) going D to: getting reward 30 [#7] (1, 3) going R to: getting reward -1 [#8] (1, 4) going U to: getting reward -1 [#9] (0, 4) going R to: getting reward -1 [#10] (0, 5) going R to: getting reward -1 [#11] (0, 6) going D to: getting reward -1 [#12] (1, 6) going R to: getting reward -1 [#13] (1, 7) going R to: getting reward -1 [#14] (1, 8) going D to: getting reward -1 [#15] (2, 8) going D to: getting reward -1 [#16] (3, 8) going R to: getting reward -1 [#17] (3, 9) going D to: getting reward -1 [#18] (4, 9) going D to: getting reward -1 [#19] (5, 9) going L to: getting reward -1 [#20] (5, 8) going L to: getting reward -1 [#21] (5, 7) going L to: getting reward -1 [#22] (5, 6) going L to: getting reward -1 [#23] (5, 5) going D to: getting reward -1 [#24] (6, 5) going L to: getting reward -1 [#25] (6, 4) going L to: getting reward -1 [#26] (6, 3) going D to: getting reward -1 [#27] (7, 3) going L to: getting reward -1 [#28] (7, 2) going L to: getting reward 60 [#29] (7, 1) going U to: getting reward -1 [#30] (6, 1) going U to: getting reward -1 [#31] (5, 1) going U to: getting reward 90 [#32] (4, 1) going L to: getting reward -1 [#33] (4, 0) going D to: getting reward -1 [#34] (5, 0) going D to: getting reward -1 [#35] (6, 0) going R to: getting reward -2 [#36] (6, 1) going R to: getting reward -1 [#37] (6, 2) going R to: getting reward -2 [#38] (6, 3) going D to: getting reward -2 [#39] (7, 3) going R to: getting reward -1 [#40] (7, 4) going R to: getting reward -1 [#41] (7, 5) going U to: getting reward -2 [#42] (6, 5) going R to: getting reward -1 [#43] (6, 6) going R to: getting reward -1 [#44] (6, 7) going R to: getting reward -1 [#45] (6, 8) going R to: getting reward -1 [#46] (6, 9) going U to: getting reward -2 [#47] (5, 9) going U to: getting reward -2 [#48] (4, 9) going U to: getting reward -2 [#49] (3, 9) going L to: getting reward -2 [#50] (3, 8) going L to: getting reward -1 [#51] (3, 7) going U to: getting reward -1 [#52] (2, 7) going L to: getting reward 120 [#53] (2, 6) going U to: getting reward -2 [#54] (1, 6) going D to: getting reward -2 [#55] (2, 6) going U to: getting reward -4 [#56] (1, 6) going D to: getting reward -4 [#57] (2, 6) going U to: getting reward -6 [#58] (1, 6) going D to: getting reward -6 [#59] (2, 6) going U to: getting reward -8 [#60] (1, 6) going D to: getting reward -8 Failed!
Results:
Testing with
As we saw, the higher the GAMMA is, the more effect the best next Qs has and makes the algorithm takes longer and also not give the optimal answer sometimes. If it gets so high it may even cause the algorithm now converge and fail to reach the target
if RUN_ALL:
GAMMA = 0.25
ALPHA = 0.8
q = runAlgorithm(700)
reportResult(q)
getting reward -1 [#1] (0, 0) going D to: getting reward -1 [#2] (1, 0) going D to: getting reward 30 [#3] (2, 0) going R to: getting reward -1 [#4] (2, 1) going R to: getting reward -1 [#5] (2, 2) going U to: getting reward -1 [#6] (1, 2) going R to: getting reward 60 [#7] (1, 3) going R to: getting reward -1 [#8] (1, 4) going U to: getting reward -1 [#9] (0, 4) going R to: getting reward -1 [#10] (0, 5) going R to: getting reward -1 [#11] (0, 6) going D to: getting reward -1 [#12] (1, 6) going D to: getting reward 90 [#13] (2, 6) going R to: getting reward -1 [#14] (2, 7) going R to: getting reward -1 [#15] (2, 8) going D to: getting reward -1 [#16] (3, 8) going R to: getting reward -1 [#17] (3, 9) going D to: getting reward -1 [#18] (4, 9) going D to: getting reward -1 [#19] (5, 9) going L to: getting reward -1 [#20] (5, 8) going L to: getting reward -1 [#21] (5, 7) going L to: getting reward -1 [#22] (5, 6) going L to: getting reward -1 [#23] (5, 5) going U to: getting reward 120 [#24] (4, 5) going U to: getting reward -1 [#25] (3, 5) going D to: getting reward -2 [#26] (4, 5) going D to: getting reward -2 [#27] (5, 5) going D to: getting reward -1 [#28] (6, 5) going L to: getting reward -1 [#29] (6, 4) going L to: getting reward -1 [#30] (6, 3) going L to: getting reward -1 [#31] (6, 2) going D to: getting reward -1 [#32] (7, 2) going L to: getting reward 150 [#33] (7, 1) going U to: getting reward -1 [#34] (6, 1) going U to: getting reward -1 [#35] (5, 1) going U to: getting reward 180 [#36] (4, 1) going L to: getting reward -1 [#37] (4, 0) going D to: getting reward -1 [#38] (5, 0) going D to: getting reward -1 [#39] (6, 0) going D to: getting reward -1 [#40] (7, 0) going D to: getting reward -1 [#41] (8, 0) going D to: getting reward -1 [#42] (9, 0) going R to: getting reward -1 [#43] (9, 1) going R to: getting reward -1 [#44] (9, 2) going R to: getting reward -1 [#45] (9, 3) going R to: getting reward -1 [#46] (9, 4) going R to: getting reward -1 [#47] (9, 5) going R to: getting reward -1 [#48] (9, 6) going U to: getting reward -1 [#49] (8, 6) going R to: getting reward -1 [#50] (8, 7) going R to: getting reward -1 [#51] (8, 8) going D to: getting reward 210 [#52] (9, 8) going R to: getting reward 300 (9, 9) Finished with path length:51, flags visited: 7, Total reward: 1093, TotalQValueEarned: 1456.1745804415787
Results:
Testing with
if RUN_ALL:
ALPHA = 0.7
q = runAlgorithm(700)
reportResult(q)
getting reward -1 [#1] (0, 0) going D to: getting reward -1 [#2] (1, 0) going D to: getting reward 30 [#3] (2, 0) going R to: getting reward -1 [#4] (2, 1) going R to: getting reward -1 [#5] (2, 2) going U to: getting reward -1 [#6] (1, 2) going R to: getting reward 60 [#7] (1, 3) going R to: getting reward -1 [#8] (1, 4) going U to: getting reward -1 [#9] (0, 4) going R to: getting reward -1 [#10] (0, 5) going R to: getting reward -1 [#11] (0, 6) going D to: getting reward -1 [#12] (1, 6) going D to: getting reward 90 [#13] (2, 6) going R to: getting reward -1 [#14] (2, 7) going R to: getting reward -1 [#15] (2, 8) going R to: getting reward -1 [#16] (2, 9) going D to: getting reward -1 [#17] (3, 9) going D to: getting reward -1 [#18] (4, 9) going D to: getting reward -1 [#19] (5, 9) going L to: getting reward -1 [#20] (5, 8) going L to: getting reward -1 [#21] (5, 7) going L to: getting reward -1 [#22] (5, 6) going L to: getting reward -1 [#23] (5, 5) going U to: getting reward 120 [#24] (4, 5) going D to: getting reward -2 [#25] (5, 5) going D to: getting reward -1 [#26] (6, 5) going L to: getting reward -1 [#27] (6, 4) going D to: getting reward -1 [#28] (7, 4) going L to: getting reward -1 [#29] (7, 3) going L to: getting reward -1 [#30] (7, 2) going L to: getting reward 150 [#31] (7, 1) going U to: getting reward -1 [#32] (6, 1) going U to: getting reward -1 [#33] (5, 1) going U to: getting reward 180 [#34] (4, 1) going L to: getting reward -1 [#35] (4, 0) going D to: getting reward -1 [#36] (5, 0) going D to: getting reward -1 [#37] (6, 0) going D to: getting reward -1 [#38] (7, 0) going D to: getting reward -1 [#39] (8, 0) going D to: getting reward -1 [#40] (9, 0) going R to: getting reward -1 [#41] (9, 1) going R to: getting reward -1 [#42] (9, 2) going R to: getting reward -1 [#43] (9, 3) going R to: getting reward -1 [#44] (9, 4) going R to: getting reward -1 [#45] (9, 5) going R to: getting reward -1 [#46] (9, 6) going U to: getting reward -1 [#47] (8, 6) going R to: getting reward -1 [#48] (8, 7) going R to: getting reward -1 [#49] (8, 8) going D to: getting reward 210 [#50] (9, 8) going R to: getting reward 300 (9, 9) Finished with path length:49, flags visited: 7, Total reward: 1096, TotalQValueEarned: 1460.1745804415784
Results:
Testing with
if RUN_ALL:
ALPHA = 0.6
q = runAlgorithm(700)
reportResult(q)
getting reward -1 [#1] (0, 0) going D to: getting reward -1 [#2] (1, 0) going D to: getting reward 30 [#3] (2, 0) going R to: getting reward -1 [#4] (2, 1) going R to: getting reward -1 [#5] (2, 2) going R to: getting reward -1 [#6] (2, 3) going U to: getting reward 60 [#7] (1, 3) going R to: getting reward -1 [#8] (1, 4) going U to: getting reward -1 [#9] (0, 4) going R to: getting reward -1 [#10] (0, 5) going R to: getting reward -1 [#11] (0, 6) going D to: getting reward -1 [#12] (1, 6) going D to: getting reward 90 [#13] (2, 6) going R to: getting reward -1 [#14] (2, 7) going R to: getting reward -1 [#15] (2, 8) going D to: getting reward -1 [#16] (3, 8) going R to: getting reward -1 [#17] (3, 9) going D to: getting reward -1 [#18] (4, 9) going D to: getting reward -1 [#19] (5, 9) going L to: getting reward -1 [#20] (5, 8) going L to: getting reward -1 [#21] (5, 7) going L to: getting reward -1 [#22] (5, 6) going L to: getting reward -1 [#23] (5, 5) going U to: getting reward 120 [#24] (4, 5) going U to: getting reward -1 [#25] (3, 5) going D to: getting reward -2 [#26] (4, 5) going D to: getting reward -2 [#27] (5, 5) going D to: getting reward -1 [#28] (6, 5) going L to: getting reward -1 [#29] (6, 4) going L to: getting reward -1 [#30] (6, 3) going D to: getting reward -1 [#31] (7, 3) going L to: getting reward -1 [#32] (7, 2) going L to: getting reward 150 [#33] (7, 1) going U to: getting reward -1 [#34] (6, 1) going U to: getting reward -1 [#35] (5, 1) going U to: getting reward 180 [#36] (4, 1) going L to: getting reward -1 [#37] (4, 0) going D to: getting reward -1 [#38] (5, 0) going D to: getting reward -1 [#39] (6, 0) going D to: getting reward -1 [#40] (7, 0) going D to: getting reward -1 [#41] (8, 0) going D to: getting reward -1 [#42] (9, 0) going R to: getting reward -1 [#43] (9, 1) going R to: getting reward -1 [#44] (9, 2) going R to: getting reward -1 [#45] (9, 3) going R to: getting reward -1 [#46] (9, 4) going R to: getting reward -1 [#47] (9, 5) going R to: getting reward -1 [#48] (9, 6) going U to: getting reward -1 [#49] (8, 6) going R to: getting reward -1 [#50] (8, 7) going R to: getting reward -1 [#51] (8, 8) going D to: getting reward 210 [#52] (9, 8) going R to: getting reward 300 (9, 9) Finished with path length:51, flags visited: 7, Total reward: 1093, TotalQValueEarned: 1456.1745804415787
Results:
As we saw, the lower the alpha is the more effect the old-Q-value will have and makes the algorithm takes longer and also not give the optimal answer sometimes
import matplotlib.pyplot as plt
import networkx as nx
def drawGraph(table: dict[tuple: int]):
fig = plt.figure(figsize=(25, 25))
G = nx.DiGraph()
added_edges = set()
for key in table:
row1, column1, action, blockType2 = key
blockType1 = initBoard[row1][column1]
row2, column2 = getNextPosition(row1, column1, action)
if( ((row1, column1, blockType1) , (row2, column2, blockType2)) not in added_edges):
G.add_edge(f"{row1},{column1},{blockType1}", f"{row2},{column2},{blockType2}", weight=round(table[key], 3))
if( ((row1, column1, REVISITED) , (row2, column2, blockType2)) not in added_edges):
G.add_edge(f"{row1},{column1},{blockType1}", f"{row2},{column2},{blockType2}", weight=round(table[key], 3))
edges = [(u, v) for (u, v, d) in G.edges(data=True)]
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos, node_size=600)
nx.draw_networkx_edges(G, pos, edgelist=edges, width=2)
nx.draw_networkx_labels(G, pos, font_size=10)
edge_labels = nx.get_edge_attributes(G, "weight")
nx.draw_networkx_edge_labels(G, pos, edge_labels, font_size=7)
ax = plt.gca()
ax.margins(0.08)
ax.figure.set_size_inches(25, 25)
plt.axis("off")
plt.tight_layout()
plt.show()
ALPHA = 0.9
GAMMA = 0.25
q = runAlgorithm(700)
drawGraph(q.getTable())
from tabulate import tabulate
def getTable(q: Q):
qtable = q.getTable()
matrix = [[*key, qtable[key]] for key in qtable]
return tabulate(matrix, headers=("row", "column", "action", "toBlockType", "award"), tablefmt="double_grid")
print(getTable(q))
╔═══════╦══════════╦══════════╦═══════════════╦═════════════╗ ║ row ║ column ║ action ║ toBlockType ║ award ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 0 ║ D ║ W ║ 6.47626 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 0 ║ D ║ R ║ -10.5897 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 2 ║ R ║ W ║ -1.22503 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 2 ║ R ║ R ║ -5.84076 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 2 ║ D ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 2 ║ D ║ R ║ -8.70023 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 3 ║ R ║ W ║ -0.977864 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 3 ║ R ║ R ║ -12.7548 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 3 ║ L ║ W ║ -3.06276 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 3 ║ L ║ R ║ -5.07955 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 3 ║ D ║ F ║ 56.775 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 3 ║ D ║ R ║ -4.25301 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 4 ║ R ║ W ║ 0.0885421 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 4 ║ R ║ R ║ -9.04842 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 4 ║ L ║ W ║ -1.33739 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 4 ║ L ║ R ║ -8.45047 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 4 ║ D ║ W ║ -1.33903 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 4 ║ D ║ R ║ -7.56148 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 5 ║ R ║ W ║ 4.35417 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 5 ║ R ║ R ║ -4.94758 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 5 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 5 ║ L ║ R ║ -6.07498 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 6 ║ R ║ W ║ -1.38118 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 6 ║ R ║ R ║ -10.1531 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 6 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 6 ║ L ║ R ║ -5.1141 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 6 ║ D ║ W ║ 21.4167 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 6 ║ D ║ R ║ -6.59407 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 7 ║ R ║ W ║ -1.40321 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 7 ║ R ║ R ║ -8.12388 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 7 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 7 ║ L ║ R ║ -5.01782 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 7 ║ D ║ W ║ -1.77575 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 7 ║ D ║ R ║ -12.4965 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 8 ║ R ║ W ║ -1.33644 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 8 ║ R ║ R ║ -4.40777 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 8 ║ L ║ W ║ -1.46005 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 8 ║ L ║ R ║ -8.54369 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 8 ║ D ║ W ║ -1.35781 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 8 ║ D ║ R ║ -13.8612 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 9 ║ L ║ W ║ -1.3343 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 9 ║ L ║ R ║ -10.2505 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 9 ║ D ║ W ║ -1.42573 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 9 ║ D ║ R ║ -2.90216 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 0 ║ R ║ W ║ 1.92572 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 0 ║ R ║ R ║ -6.937 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 0 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 0 ║ U ║ R ║ -3.91376 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 0 ║ D ║ F ║ 29.905 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 0 ║ D ║ R ║ -13.2218 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 1 ║ R ║ W ║ 13.9222 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 1 ║ R ║ R ║ -14.2709 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 1 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 1 ║ L ║ R ║ -4.38017 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 1 ║ D ║ W ║ -0.264475 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 1 ║ D ║ R ║ -2.94489 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 2 ║ R ║ F ║ 59.6889 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 2 ║ R ║ R ║ -8.2636 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 2 ║ L ║ W ║ -1.43638 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 2 ║ L ║ R ║ -3.14481 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 2 ║ U ║ W ║ -3.02016 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 2 ║ U ║ R ║ -7.81804 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 2 ║ D ║ W ║ -1.35416 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 2 ║ D ║ R ║ -9.9066 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 3 ║ R ║ W ║ -1.38943 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 3 ║ R ║ R ║ -10.9329 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 3 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 3 ║ L ║ R ║ -3.94409 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 3 ║ U ║ W ║ -1.24447 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 3 ║ U ║ R ║ -7.61337 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 3 ║ D ║ W ║ -1.40177 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 3 ║ D ║ R ║ -2.72813 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 4 ║ L ║ F ║ 30 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 4 ║ L ║ R ║ -16.3715 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 4 ║ U ║ W ║ -1.21639 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 4 ║ U ║ R ║ -15.3175 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 4 ║ D ║ W ║ -2.08293 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 4 ║ D ║ R ║ -6.7601 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 6 ║ R ║ W ║ -1.33355 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 6 ║ R ║ R ║ -14.0322 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 6 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 6 ║ U ║ R ║ -3.12404 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 6 ║ D ║ F ║ 89.6667 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 6 ║ D ║ R ║ -3.15006 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ R ║ W ║ -1.33391 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ R ║ R ║ -12.7041 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ L ║ W ║ 19.1781 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ L ║ R ║ -4.61767 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ U ║ W ║ -1.49531 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ U ║ R ║ -4.34359 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ D ║ W ║ 20.7723 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ D ║ R ║ -10.1233 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ R ║ W ║ -1.33562 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ R ║ R ║ -10.3634 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ L ║ W ║ -1.50977 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ L ║ R ║ -4.61251 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ U ║ W ║ -1.39519 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ U ║ R ║ -3.29751 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ D ║ W ║ -2.49847 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ D ║ R ║ -8.36552 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 9 ║ L ║ W ║ -1.34751 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 9 ║ L ║ R ║ -10.2648 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 9 ║ U ║ W ║ -1.33359 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 9 ║ U ║ R ║ -9.34595 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 9 ║ D ║ W ║ -1.74288 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 9 ║ D ║ R ║ -3.25143 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 0 ║ R ║ W ║ -0.379861 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 0 ║ R ║ R ║ -10.6234 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 0 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 0 ║ U ║ R ║ -12.5879 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 1 ║ R ║ W ║ -1.60562 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 1 ║ R ║ R ║ -4.24074 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 1 ║ L ║ F ║ 29.55 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 1 ║ L ║ R ║ -15.7441 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 1 ║ U ║ W ║ 2.48056 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 1 ║ U ║ R ║ -5.28966 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 2 ║ R ║ W ║ -1.38893 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 2 ║ R ║ R ║ -5.94636 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 2 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 2 ║ L ║ R ║ -8.45144 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 2 ║ U ║ W ║ 13.9023 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 2 ║ U ║ R ║ -6.73266 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 2 ║ D ║ W ║ -2.4291 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 2 ║ D ║ R ║ -2.88642 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 3 ║ R ║ W ║ -2.10231 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 3 ║ R ║ R ║ -4.99645 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 3 ║ L ║ W ║ -1.46157 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 3 ║ L ║ R ║ -5.17878 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 3 ║ U ║ F ║ 56.775 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 3 ║ U ║ R ║ -3.16722 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 4 ║ L ║ W ║ -1.36434 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 4 ║ L ║ R ║ -4.65567 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 4 ║ U ║ W ║ -2.13014 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 4 ║ U ║ R ║ -4.45861 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 6 ║ R ║ W ║ -1.33322 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 6 ║ R ║ R ║ -8.52127 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 6 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 6 ║ U ║ R ║ -8.74111 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 7 ║ R ║ W ║ -1.33287 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 7 ║ R ║ R ║ -7.16095 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 7 ║ L ║ F ║ 89.3482 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 7 ║ L ║ R ║ -5.38249 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 7 ║ U ║ W ║ -1.33348 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 7 ║ U ║ R ║ -8.30666 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 7 ║ D ║ W ║ -1.5811 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 7 ║ D ║ R ║ -4.55832 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 8 ║ R ║ W ║ -1.3378 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 8 ║ R ║ R ║ -4.80857 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 8 ║ L ║ W ║ 1.68201 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 8 ║ L ║ R ║ -12.4331 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 8 ║ U ║ W ║ -1.33391 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 8 ║ U ║ R ║ -6.16262 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 8 ║ D ║ W ║ -1.33149 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 8 ║ D ║ R ║ -12.1742 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 9 ║ L ║ W ║ -1.77839 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 9 ║ L ║ R ║ -6.54105 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 9 ║ U ║ W ║ -1.33349 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 9 ║ U ║ R ║ -4.31664 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 9 ║ D ║ W ║ -1.33198 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 9 ║ D ║ R ║ -5.00118 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 2 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 2 ║ U ║ R ║ -3.0502 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 5 ║ D ║ F ║ 30 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 5 ║ D ║ R ║ -6.36293 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 7 ║ R ║ W ║ -1.33309 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 7 ║ R ║ R ║ -10.6112 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 7 ║ U ║ W ║ 5.75 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 7 ║ U ║ R ║ -2.93224 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 8 ║ R ║ W ║ -1.32596 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 8 ║ R ║ R ║ -8.11338 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 8 ║ L ║ W ║ -2.97971 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 8 ║ L ║ R ║ -4.11271 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 8 ║ U ║ W ║ -1.42072 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 8 ║ U ║ R ║ -4.22726 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 9 ║ L ║ W ║ -1.43647 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 9 ║ L ║ R ║ -6.11682 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 9 ║ U ║ W ║ -1.33349 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 9 ║ U ║ R ║ -2.39761 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 9 ║ D ║ W ║ -1.30385 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 3 ║ 9 ║ D ║ R ║ -8.79885 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 0 ║ R ║ F ║ 152.254 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 0 ║ R ║ R ║ -9.92277 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 0 ║ D ║ W ║ -1.33333 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 0 ║ D ║ R ║ -7.00613 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 1 ║ L ║ W ║ -1.33333 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 1 ║ L ║ R ║ -9.0959 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 1 ║ D ║ W ║ -2.92087 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 1 ║ D ║ R ║ -5.29584 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 3 ║ D ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 3 ║ D ║ R ║ -16.8965 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 5 ║ U ║ W ║ -6.01243 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 5 ║ U ║ R ║ -18.0675 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 5 ║ D ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 5 ║ D ║ R ║ -2.29578 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 9 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 9 ║ U ║ R ║ -4.15176 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 9 ║ D ║ W ║ -1.2154 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 4 ║ 9 ║ D ║ R ║ -8.8386 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 0 ║ R ║ W ║ 43.1246 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 0 ║ R ║ R ║ -4.0283 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 0 ║ U ║ W ║ -2.28626 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 0 ║ U ║ R ║ -5.65034 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 0 ║ D ║ W ║ -1.33333 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 0 ║ D ║ R ║ -13.0997 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 1 ║ L ║ W ║ -3.54674 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 1 ║ L ║ R ║ -7.25703 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 1 ║ U ║ F ║ 179.667 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 1 ║ U ║ R ║ -4.00581 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 1 ║ D ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 1 ║ D ║ R ║ -13.538 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 3 ║ U ║ W ║ -2.76005 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 3 ║ U ║ R ║ -13.4456 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 3 ║ D ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 3 ║ D ║ R ║ -8.604 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 5 ║ R ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 5 ║ R ║ R ║ -12.6878 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 5 ║ U ║ F ║ 119.426 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 5 ║ U ║ R ║ -19.4167 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 5 ║ D ║ W ║ -1.18311 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 5 ║ D ║ R ║ -8.62655 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 6 ║ R ║ W ║ -1.45 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 6 ║ R ║ R ║ -8.32082 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 6 ║ L ║ W ║ 28.8565 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 6 ║ L ║ R ║ -19.3746 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 6 ║ D ║ W ║ -1.30045 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 6 ║ D ║ R ║ -3.72675 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 7 ║ R ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 7 ║ R ║ R ║ -2.52292 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 7 ║ L ║ W ║ 6.21413 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 7 ║ L ║ R ║ -13.7725 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 7 ║ D ║ W ║ -1.47088 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 7 ║ D ║ R ║ -2.85862 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 8 ║ R ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 8 ║ R ║ R ║ -10.4206 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 8 ║ L ║ W ║ 0.553532 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 8 ║ L ║ R ║ -8.72132 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 8 ║ D ║ W ║ -1.8557 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 8 ║ D ║ R ║ -18.3257 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 9 ║ L ║ W ║ -0.861617 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 9 ║ L ║ R ║ -11.2375 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 9 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 9 ║ U ║ R ║ -3.22622 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 9 ║ D ║ W ║ -2.20144 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 5 ║ 9 ║ D ║ R ║ -5.00476 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 0 ║ R ║ W ║ 9.72952 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 0 ║ R ║ R ║ -10.5449 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 0 ║ U ║ W ║ 9.94838 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 0 ║ U ║ R ║ -5.13524 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 0 ║ D ║ W ║ -1.33332 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 0 ║ D ║ R ║ -24.076 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 1 ║ R ║ W ║ -1.38171 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 1 ║ R ║ R ║ -3.15806 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 1 ║ L ║ W ║ 1.20786 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 1 ║ L ║ R ║ -9.53233 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 1 ║ U ║ W ║ 43.9167 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 1 ║ U ║ R ║ -8.61342 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 1 ║ D ║ F ║ 150.11 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 1 ║ D ║ R ║ -13.0095 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 2 ║ R ║ W ║ -1.44032 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 2 ║ R ║ R ║ -13.9141 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 2 ║ L ║ W ║ 36.2863 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 2 ║ L ║ R ║ -7.16027 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 2 ║ D ║ W ║ 37.0812 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 2 ║ D ║ R ║ -7.1438 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 3 ║ R ║ W ║ -1.50062 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 3 ║ R ║ R ║ -6.65533 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 3 ║ L ║ W ║ -2.60836 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 3 ║ L ║ R ║ -4.07569 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 3 ║ U ║ W ║ -1.72266 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 3 ║ U ║ R ║ -3.08673 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 3 ║ D ║ W ║ 8.26424 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 3 ║ D ║ R ║ -10.2818 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 4 ║ R ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 4 ║ R ║ R ║ -3.28304 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 4 ║ L ║ W ║ -1.28555 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 4 ║ L ║ R ║ -3.43696 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 4 ║ D ║ W ║ 1.07023 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 4 ║ D ║ R ║ -20.5739 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 5 ║ R ║ W ║ -1.34841 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 5 ║ R ║ R ║ -4.5917 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 5 ║ L ║ W ║ -0.732442 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 5 ║ L ║ R ║ -5.17443 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 5 ║ U ║ W ║ 28.5192 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 5 ║ U ║ R ║ -21.4389 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 5 ║ D ║ W ║ -2.15106 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 5 ║ D ║ R ║ -3.37949 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 6 ║ R ║ W ║ -1.42978 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 6 ║ R ║ R ║ -7.26991 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 6 ║ L ║ W ║ -1.18311 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 6 ║ L ║ R ║ -10.581 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 6 ║ U ║ W ║ -1.2475 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 6 ║ U ║ R ║ -8.93656 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 7 ║ R ║ W ║ -1.73773 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 7 ║ R ║ R ║ -6.40506 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 7 ║ L ║ W ║ -2.06959 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 7 ║ L ║ R ║ -5.87563 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 7 ║ U ║ W ║ -1.2475 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 7 ║ U ║ R ║ -6.40825 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 8 ║ R ║ W ║ -3.65443 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 8 ║ R ║ R ║ -4.90922 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 8 ║ L ║ W ║ -4.11387 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 8 ║ L ║ R ║ -7.4735 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 8 ║ U ║ W ║ -1.28069 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 8 ║ U ║ R ║ -6.99742 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 9 ║ L ║ W ║ -3.37441 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 9 ║ L ║ R ║ -3.91912 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 9 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 6 ║ 9 ║ U ║ R ║ -4.75212 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 0 ║ R ║ F ║ 179.656 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 0 ║ R ║ R ║ -11.3353 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 0 ║ U ║ W ║ 1.47426 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 0 ║ U ║ R ║ -14.8954 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 0 ║ D ║ W ║ -1.33327 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 0 ║ D ║ R ║ -21.3922 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 1 ║ R ║ W ║ 0.680613 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 1 ║ R ║ R ║ -7.13498 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 1 ║ L ║ W ║ -1.33327 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 1 ║ L ║ R ║ -26.2907 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 1 ║ U ║ W ║ 9.97917 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 1 ║ U ║ R ║ -17.508 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 2 ║ R ║ W ║ -0.837766 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 2 ║ R ║ R ║ -8.65988 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 2 ║ L ║ F ║ 152.495 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 2 ║ L ║ R ║ -9.41813 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 2 ║ U ║ W ║ -1.26487 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 2 ║ U ║ R ║ -6.47112 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 3 ║ R ║ W ║ -0.2581 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 3 ║ R ║ R ║ -3.58917 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 3 ║ L ║ W ║ 37.1237 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 3 ║ L ║ R ║ -9.12954 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 3 ║ U ║ W ║ -0.757734 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 3 ║ U ║ R ║ -6.33079 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 4 ║ R ║ W ║ -1.645 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 4 ║ R ║ R ║ -6.37037 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 4 ║ L ║ W ║ 8.28092 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 4 ║ L ║ R ║ -8.49476 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 4 ║ U ║ W ║ -0.741566 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 4 ║ U ║ R ║ -6.48125 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 5 ║ L ║ W ║ 1.07023 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 5 ║ L ║ R ║ -23.0728 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 5 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 7 ║ 5 ║ U ║ R ║ -2.35932 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 0 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 0 ║ U ║ R ║ -15.0468 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 0 ║ D ║ W ║ -1.33306 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 0 ║ D ║ R ║ -18.9011 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 6 ║ R ║ W ║ 16.5586 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 6 ║ R ║ R ║ 6.81208 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 6 ║ D ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 6 ║ D ║ R ║ -18.8243 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 7 ║ R ║ W ║ 70.2344 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 7 ║ R ║ R ║ 20.0113 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 7 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 7 ║ L ║ R ║ -4.53903 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 8 ║ R ║ W ║ 75.875 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 8 ║ R ║ R ║ 73.0729 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 8 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 8 ║ L ║ R ║ 13.6051 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 8 ║ D ║ F ║ 284.938 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 8 ║ D ║ R ║ 72.5594 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 9 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 9 ║ L ║ R ║ 19.5823 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 9 ║ D ║ T ║ 307.5 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 8 ║ 9 ║ D ║ R ║ -2 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 0 ║ R ║ W ║ -1.33224 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 0 ║ R ║ R ║ -22.6077 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 0 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 0 ║ U ║ R ║ -13.4926 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 1 ║ R ║ W ║ -1.32897 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 1 ║ R ║ R ║ -15.5924 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 1 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 1 ║ L ║ R ║ -23.0868 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 2 ║ R ║ W ║ -1.31586 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 2 ║ R ║ R ║ -36.7316 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 2 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 2 ║ L ║ R ║ -7.47318 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 3 ║ R ║ W ║ -1.26344 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 3 ║ R ║ R ║ -38.9662 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 3 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 3 ║ L ║ R ║ -21.6444 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 4 ║ R ║ W ║ -1.05377 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 4 ║ R ║ R ║ -31.043 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 4 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 4 ║ L ║ R ║ -34.6036 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 5 ║ R ║ W ║ -0.215088 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 5 ║ R ║ R ║ -23.4823 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 5 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 5 ║ L ║ R ║ -32.4893 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 6 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 6 ║ L ║ R ║ -22.8939 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 6 ║ U ║ W ║ 3.13965 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 6 ║ U ║ R ║ -17.3342 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 8 ║ R ║ T ║ 299.75 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 8 ║ R ║ R ║ -2 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 8 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 8 ║ U ║ R ║ 16.5907 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 9 ║ L ║ F ║ 30 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 9 ║ L ║ R ║ -2 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 9 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 9 ║ 9 ║ U ║ R ║ -2 ║ ╚═══════╩══════════╩══════════╩═══════════════╩═════════════╝
M = "\
WWWBFWWWFWFWW \
WFBFBWFWWWWWW \
WWFWWWWWWWWWT"
initBoard = list(map(list, M.split()))
initBoard
[['W', 'W', 'W', 'B', 'F', 'W', 'W', 'W', 'F', 'W', 'F', 'W', 'W'], ['W', 'F', 'B', 'F', 'B', 'W', 'F', 'W', 'W', 'W', 'W', 'W', 'W'], ['W', 'W', 'F', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'T']]
Testing with
ALPHA = 0.9
GAMMA = 0.25
q = runAlgorithm(700)
reportResult(q)
getting reward -1 [#1] (0, 0) going D to: getting reward -1 [#2] (1, 0) going R to: getting reward 30 [#3] (1, 1) going D to: getting reward -1 [#4] (2, 1) going R to: getting reward 60 [#5] (2, 2) going R to: getting reward -1 [#6] (2, 3) going U to: getting reward 90 [#7] (1, 3) going D to: getting reward -2 [#8] (2, 3) going R to: getting reward -1 [#9] (2, 4) going R to: getting reward -1 [#10] (2, 5) going U to: getting reward -1 [#11] (1, 5) going R to: getting reward 120 [#12] (1, 6) going U to: getting reward -1 [#13] (0, 6) going R to: getting reward -1 [#14] (0, 7) going R to: getting reward 150 [#15] (0, 8) going R to: getting reward -1 [#16] (0, 9) going R to: getting reward 180 [#17] (0, 10) going R to: getting reward -1 [#18] (0, 11) going D to: getting reward -1 [#19] (1, 11) going D to: getting reward -1 [#20] (2, 11) going R to: getting reward 300 (2, 12) Finished with path length:19, flags visited: 6, Total reward: 915, TotalQValueEarned: 1218.5138224907087
Results:
drawGraph(q.getTable())
print(getTable(q))
╔═══════╦══════════╦══════════╦═══════════════╦═════════════╗ ║ row ║ column ║ action ║ toBlockType ║ award ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 0 ║ R ║ W ║ -1.51787 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 0 ║ R ║ R ║ -11.119 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 0 ║ D ║ W ║ 7.45853 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 0 ║ D ║ R ║ -6.2912 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 1 ║ R ║ W ║ -2.78977 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 1 ║ R ║ R ║ -3.55771 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 1 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 1 ║ L ║ R ║ -3.59151 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 1 ║ D ║ F ║ 29.7525 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 1 ║ D ║ R ║ -6.26808 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 2 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 2 ║ L ║ R ║ -3.2595 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 4 ║ R ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 4 ║ R ║ R ║ -1.90666 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 5 ║ R ║ W ║ 8.47332 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 5 ║ R ║ R ║ -3.19874 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 5 ║ L ║ F ║ 148.143 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 5 ║ L ║ R ║ -5.65727 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 5 ║ D ║ W ║ 7.60832 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 5 ║ D ║ R ║ -3.89871 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 6 ║ R ║ W ║ 39.2632 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 6 ║ R ║ R ║ -6.79647 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 6 ║ L ║ W ║ 39.1056 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 6 ║ L ║ R ║ -1.10232 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 6 ║ D ║ F ║ 147.378 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 6 ║ D ║ R ║ -2.98684 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 7 ║ R ║ F ║ 161.053 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 7 ║ R ║ R ║ -12.3826 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 7 ║ L ║ W ║ 8.10054 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 7 ║ L ║ R ║ 4.72407 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 7 ║ D ║ W ║ 10.3725 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 7 ║ D ║ R ║ -6.66661 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 8 ║ R ║ W ║ 44.2107 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 8 ║ R ║ R ║ -2.67308 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 8 ║ L ║ W ║ 1.02529 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 8 ║ L ║ R ║ -9.85866 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 8 ║ D ║ W ║ 1.71016 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 8 ║ D ║ R ║ -5.93739 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 9 ║ R ║ F ║ 180.843 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 9 ║ R ║ R ║ -3.3629 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 9 ║ L ║ F ║ 176.535 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 9 ║ L ║ R ║ -7.68129 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 9 ║ D ║ W ║ 0.851649 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 9 ║ D ║ R ║ -5.48837 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 10 ║ R ║ W ║ 3.37109 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 10 ║ R ║ R ║ 2.18628 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 10 ║ L ║ W ║ 1.16139 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 10 ║ L ║ R ║ -2.05823 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 10 ║ D ║ W ║ 3.36224 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 10 ║ D ║ R ║ -3.0598 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 11 ║ R ║ W ║ 17.4722 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 11 ║ R ║ R ║ 9.98579 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 11 ║ L ║ F ║ 151.252 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 11 ║ L ║ R ║ -1.61019 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 11 ║ D ║ W ║ 17.4844 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 11 ║ D ║ R ║ 10.701 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 12 ║ L ║ W ║ 33.0318 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 12 ║ L ║ R ║ -7.03141 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 12 ║ D ║ W ║ 73.8811 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 0 ║ 12 ║ D ║ R ║ 71.0846 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 0 ║ R ║ F ║ 33.8341 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 0 ║ R ║ R ║ -3.05719 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 0 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 0 ║ U ║ R ║ -3.45102 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 0 ║ D ║ W ║ 2.16267 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 0 ║ D ║ R ║ -7.3384 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 1 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 1 ║ L ║ R ║ -1.77101 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 1 ║ U ║ W ║ -1.89741 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 1 ║ U ║ R ║ -4.91405 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 1 ║ D ║ W ║ 15.3365 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 1 ║ D ║ R ║ -6.98138 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 3 ║ D ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 3 ║ D ║ R ║ -1.85077 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 5 ║ R ║ F ║ 122.204 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 5 ║ R ║ R ║ -6.4339 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 5 ║ U ║ W ║ 36.7851 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 5 ║ U ║ R ║ 31.2145 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 5 ║ D ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 5 ║ D ║ R ║ -8.19663 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 6 ║ R ║ W ║ 8.81579 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 6 ║ R ║ R ║ -10.1466 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 6 ║ L ║ W ║ 6.70478 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 6 ║ L ║ R ║ 5.27251 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 6 ║ U ║ W ║ 8.81579 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 6 ║ U ║ R ║ 3.98097 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 6 ║ D ║ W ║ -0.988952 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 6 ║ D ║ R ║ -3.75501 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ R ║ W ║ 39.2632 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ R ║ R ║ -4.63069 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ L ║ F ║ 147.601 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ L ║ R ║ -3.09543 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ U ║ W ║ 4.81164 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ U ║ R ║ -8.38108 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ D ║ W ║ -1.31955 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 7 ║ D ║ R ║ -10.6264 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ R ║ W ║ 11.4029 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ R ║ R ║ 6.78658 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ L ║ W ║ -1.14463 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ L ║ R ║ -2.30378 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ U ║ F ║ 161.053 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ U ║ R ║ -2.44193 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ D ║ W ║ -0.770397 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 8 ║ D ║ R ║ -3.65276 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 9 ║ R ║ W ║ 7.81647 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 9 ║ R ║ R ║ -0.184744 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 9 ║ L ║ W ║ 0.737197 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 9 ║ L ║ R ║ -0.687621 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 9 ║ U ║ W ║ 44.2069 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 9 ║ U ║ R ║ -5.97003 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 9 ║ D ║ W ║ 3.36757 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 9 ║ D ║ R ║ -7.61126 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 10 ║ R ║ W ║ 17.4844 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 10 ║ R ║ R ║ -1.27723 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 10 ║ L ║ W ║ -0.0417402 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 10 ║ L ║ R ║ -8.80857 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 10 ║ U ║ F ║ 207.81 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 10 ║ U ║ R ║ -5.07646 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 10 ║ D ║ W ║ 17.4792 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 10 ║ D ║ R ║ 16.4011 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 11 ║ R ║ W ║ 73.8853 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 11 ║ R ║ R ║ 72.9263 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 11 ║ L ║ W ║ 3.36894 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 11 ║ L ║ R ║ -1.41263 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 11 ║ U ║ W ║ 6.70085 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 11 ║ U ║ R ║ -1.41005 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 11 ║ D ║ W ║ 73.9375 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 11 ║ D ║ R ║ 69.1557 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 12 ║ L ║ W ║ 17.4796 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 12 ║ L ║ R ║ 1.41473 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 12 ║ U ║ W ║ 16.877 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 12 ║ U ║ R ║ 15.6292 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 12 ║ D ║ T ║ 299.727 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 1 ║ 12 ║ D ║ R ║ -2 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 0 ║ R ║ W ║ 12.4494 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 0 ║ R ║ R ║ -9.22139 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 0 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 0 ║ U ║ R ║ -3.41317 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 1 ║ R ║ F ║ 65.3461 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 1 ║ R ║ R ║ -10.4769 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 1 ║ L ║ W ║ -2.95184 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 1 ║ L ║ R ║ -3.45826 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 1 ║ U ║ F ║ 29.7193 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 1 ║ U ║ R ║ -8.58099 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 2 ║ R ║ W ║ 21.3843 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 2 ║ R ║ R ║ -18.3832 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 2 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 2 ║ L ║ R ║ -7.66482 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 3 ║ R ║ W ║ 0.596937 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 3 ║ R ║ R ║ -14.3834 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 3 ║ L ║ F ║ 30 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 3 ║ L ║ R ║ -14.4163 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 3 ║ U ║ F ║ 89.5373 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 3 ║ U ║ R ║ -7.34304 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 4 ║ R ║ W ║ 6.38775 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 4 ║ R ║ R ║ -2.42263 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 4 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 4 ║ L ║ R ║ -28.5435 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 5 ║ R ║ W ║ 2.21096 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 5 ║ R ║ R ║ -2.554 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 5 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 5 ║ L ║ R ║ -3.30415 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 5 ║ U ║ W ║ 29.551 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 5 ║ U ║ R ║ -1.99084 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 6 ║ R ║ W ║ 0.10991 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 6 ║ R ║ R ║ -8.43652 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 6 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 6 ║ L ║ R ║ -2.5144 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 6 ║ U ║ F ║ 121.599 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 6 ║ U ║ R ║ -3.71366 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 7 ║ R ║ W ║ -0.729749 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 7 ║ R ║ R ║ -4.81895 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 7 ║ L ║ W ║ -1.36657 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 7 ║ L ║ R ║ -4.39455 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 7 ║ U ║ W ║ -0.4285 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 7 ║ U ║ R ║ -12.5497 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 8 ║ R ║ W ║ 3.37061 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 8 ║ R ║ R ║ -6.07076 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 8 ║ L ║ W ║ 0.646063 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 8 ║ L ║ R ║ -14.8294 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 8 ║ U ║ W ║ 36.7839 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 8 ║ U ║ R ║ -12.12 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 9 ║ R ║ W ║ 17.4726 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 9 ║ R ║ R ║ 13.5112 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 9 ║ L ║ W ║ 7.27791 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 9 ║ L ║ R ║ -8.21518 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 9 ║ U ║ W ║ 10.3567 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 9 ║ U ║ R ║ -11.1886 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 10 ║ R ║ W ║ 73.9318 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 10 ║ R ║ R ║ 69.3085 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 10 ║ L ║ W ║ 2.35608 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 10 ║ L ║ R ║ -4.38329 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 10 ║ U ║ W ║ 3.33362 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 10 ║ U ║ R ║ -5.68042 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 11 ║ R ║ T ║ 299.75 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 11 ║ R ║ R ║ -2 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 11 ║ L ║ W ║ 16.39 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 11 ║ L ║ R ║ 13.7864 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 11 ║ U ║ W ║ 17.1322 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 11 ║ U ║ R ║ 4.78121 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 12 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 12 ║ L ║ R ║ -2 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 12 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═════════════╣ ║ 2 ║ 12 ║ U ║ R ║ -2 ║ ╚═══════╩══════════╩══════════╩═══════════════╩═════════════╝
M = "\
WWW \
FBB \
WWT"
initBoard = list(map(list, M.split()))
initBoard
[['W', 'W', 'W'], ['F', 'B', 'B'], ['W', 'W', 'T']]
ALPHA = 0.9
GAMMA = 0.25
q = runAlgorithm(700)
reportResult(q)
getting reward -1 [#1] (0, 0) going D to: getting reward 30 [#2] (1, 0) going D to: getting reward -1 [#3] (2, 0) going R to: getting reward -1 [#4] (2, 1) going R to: getting reward 300 (2, 2) Finished with path length:3, flags visited: 1, Total reward: 327, TotalQValueEarned: 425.2109375
drawGraph(q.getTable())
print(getTable(q))
╔═══════╦══════════╦══════════╦═══════════════╦═══════════╗ ║ row ║ column ║ action ║ toBlockType ║ award ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 0 ║ 0 ║ R ║ W ║ -1.39742 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 0 ║ 0 ║ R ║ R ║ -8.71674 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 0 ║ 0 ║ D ║ F ║ 34.3672 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 0 ║ 0 ║ D ║ R ║ -1.14615 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 0 ║ 1 ║ R ║ W ║ -1.62145 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 0 ║ 1 ║ R ║ R ║ -4.8522 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 0 ║ 1 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 0 ║ 1 ║ L ║ R ║ -8.08732 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 0 ║ 2 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 0 ║ 2 ║ L ║ R ║ -6.93439 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 1 ║ 0 ║ U ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 1 ║ 0 ║ U ║ R ║ -4.1102 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 1 ║ 0 ║ D ║ W ║ 17.4688 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 1 ║ 0 ║ D ║ R ║ 12.7724 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 2 ║ 0 ║ R ║ W ║ 73.875 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 2 ║ 0 ║ R ║ R ║ 72.4964 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 2 ║ 0 ║ U ║ F ║ 30 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 2 ║ 0 ║ U ║ R ║ 1.0746 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 2 ║ 1 ║ R ║ T ║ 299.5 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 2 ║ 1 ║ R ║ R ║ -2 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 2 ║ 1 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 2 ║ 1 ║ L ║ R ║ 15.9863 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 2 ║ 2 ║ L ║ W ║ -1 ║ ╠═══════╬══════════╬══════════╬═══════════════╬═══════════╣ ║ 2 ║ 2 ║ L ║ R ║ -2 ║ ╚═══════╩══════════╩══════════╩═══════════════╩═══════════╝